#pragma once

#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
using namespace std;

// 自定义协议

// 请求格式
typedef struct request
{
    int x;
    int y;
    char op;
} request_t;

// 响应格式
typedef struct responce
{
    int code = 0;   // server 运算完毕的计算状态 code(0:success),code(-1:div 0)
    int result; // 计算结果，需要判断是正确的计算结果还是错误的
} responce_t;

// 序列化
string SerializeRequest(const request_t& req)
{
    Json::Value root; // 可以承载任何对象，Json是一种KV式的序列化方案
    root["datax"] = req.x;
    root["datay"] = req.y;
    root["operator"] = req.op;

    Json::FastWriter writer;
    string reqt = writer.write(root);
    return reqt;
}

// 反序列化
void DeserializeRequest(const string& json_string,request_t& out)
{
    Json::Value root;
    Json::Reader reader;
    reader.parse(json_string,root); // 将字符串反序列化到root
    out.x = root["datax"].asInt();
    out.y = root["datay"].asInt();
    out.op = (char)root["operator"].asInt();

}

// 序列化
string SerializeResponce(const responce_t& resp)
{
    Json::Value root; // 可以承载任何对象，Json是一种KV式的序列化方案
    root["code"] = resp.code;
    root["result"] = resp.result;
    Json::FastWriter writer;
    string res = writer.write(root);
    return res;
}


// 反序列化
void DeserializeResponce(const string& json_string,responce_t& out)
{
    Json::Value root;
    Json::Reader reader;
    reader.parse(json_string,root); // 将字符串反序列化到root
    out.code = root["code"].asInt();
    out.result = root["result"].asInt();
}

